package zadanie4;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import zadanie4.Liczba2;
import zadanie4.Liczba2Exception;

/**
 * @author ghost
 *
 */
public class Liczba2Test 
{
	Liczba2 objekt;
	
	/**
	 * @throws java.lang.Exception
	 */
	@BeforeClass
	public static void setUpBeforeClass() throws Exception 
	{
	}

	/**
	 * @throws java.lang.Exception
	 */
	@AfterClass
	public static void tearDownAfterClass() throws Exception 
	{
	}

	/**
	 * @throws java.lang.Exception
	 */
	@Before
	public void ustawienie() throws Exception 
	{
		objekt = new Liczba2(0);
	}

	/**
	 * @throws java.lang.Exception
	 */
	@After
	public void zakonczenie() throws Exception 
	{
		objekt = null;
	}

	/**
	 * Test method for {@link zadanie4.Liczba2#Liczba2(java.lang.String, int)}.
	 */
	@Test (timeout = 1000)
	public final void testujLiczba2() 
	{
		try 
		{
			for (int i = 0; i < 10000; ++i)
			{
				objekt = new Liczba2(Integer.toString(i).toUpperCase(), 10);
				for (int podstawa = 2; podstawa < 16; ++podstawa)
				{
					assertEquals("Nie udalo sie!", objekt.zapis(podstawa), Integer.toString(i, podstawa).toUpperCase());
					if (podstawa < 11)
					{
						assertEquals("Nie udalo sie!", Long.parseLong(objekt.zapis(podstawa)), Long.parseLong(Integer.toString(i, podstawa).toUpperCase()));
						assertEquals("Nie udalo sie!", Double.parseDouble(objekt.zapis(podstawa)), Double.parseDouble(Integer.toString(i, podstawa).toUpperCase()), 1);
						assertTrue(Long.parseLong(objekt.zapis(podstawa)) == Long.parseLong(Integer.toString(i, podstawa).toUpperCase()));
						assertFalse(Long.parseLong(objekt.zapis(podstawa)) != Long.parseLong(Integer.toString(i, podstawa).toUpperCase()));
					}
				}
			}
		}
		catch (Liczba2Exception e) 
		{
			System.out.println(e.getMessage() );//wyświetl powód wyjątku
		}
	}
	
	/**
	 * Test method for {@link zadanie4.Liczba2#Liczba2(java.lang.String, int)}.
	 */
	@Ignore
	@Test (expected = Liczba2Exception.class)
	public final void testuj_wywolanie_wyjatku() 
	{
		try 
		{
			objekt = new Liczba2();
		}
		catch (Liczba2Exception e) 
		{
			System.out.println(e.getMessage() );//wyświetl powód wyjątku
		}
	}
}
